PostgreSQL 高可用 Repmgr

1 本章背景知识

Repmgr 是由第二象限开发的一款开源的流复制管理工具,用于管理 PostgreSQL 集群中的数据复制和故障转移。它增强了 PostgreSQL 的内置热备功能(HOT-STANDBY),包括用于配置备用服务器、监视主备流复制、自动故障转移、手动主备切换等功能。

1.1 Repmgr功能概述

  1. 配置简单,可一键式完成部署操作。
  2. 支持自动Failover和手动Switchover。
  3. 分布式管理集群节点,易扩展,可在线增删集群节点。
  4. 内置Repmgrd守护进程,能执行集群节点运行状态的监控和故障处理。
  5. 命令行工具Repmgr功能丰富,包含节点注册Register、Clone节点、Promote节点、Follow节点以及Switchover操作等。

1.2 基本术语

术语 简介
集群 (1)是由数据节点,仲裁节点构成的7*24小时不间断可访问数据的管理系统。 (2)一般以半数以上节点数为仲裁依据,组织主节点、备节点、仲裁节点参与投票,主要是防止脑裂。
数据节点 (1)在Repmgr+PG12的集群中,只有一个数据节点为primary,支持读写操作。 (2)其它的数据节点为standby,只支持读操作。
集群管理组件 (1)repmgrd是集群守护进程,用于监控集群的运行状态。 (2)repmgr命令行工具,用于查看集群状态和对集群执行相关运维操作。
Witness节点 (1)witness(仲裁) 节点可以部署,也可以不部署,主要用于避免脑裂。 (2)集群仅支持1个witness节点的部署使用。 (3)witness节点是作为一个独立节点运行,不与集群其它数据节点构成流复制关系。

2 Repmgr集群架构

Repmgr集群只能有一个主数据节点,可以有一个或多个备数据节点,为了避免脑裂可以在集群中部署一个Witness节点。

3 Repmgr集群部署步骤简介

Repmgr流复制管理工具对集群节点的管理是基于一个分布式的管理系统。每个节点都有自己的repmgr.conf配置文件,用来记录本节点的ID、节点名称、连接信息、数据库PGDATA目录等配置参数。在配置好这些参数后,就可以通过repmgr命令实现对集群节点的“一键式”部署。

3.1 主节点部署步骤

  1. 配置好相关参数。
  2. 启动数据库。
  3. 利用“repmgr primary register”命令实现对主节点的注册。(该注册的目的是把配置文件的一些主要参数写到元数据表中,以便repmgr系统对集群节点的识别操作等。)
  4. 启动repmgrd守护进程。

3.2 备节点部署步骤

  1. 配置好相关参数。
  2. 利用“repmgr standby clone”命令对主节点进行物理拷贝。
  3. 启动数据库。
  4. 利用“repmgr standby register”命令实现对备节点的注册。
  5. 启动repmgrd守护进程。

3.3 Witness节点部署步骤

  1. 配置好相关参数。

  2. 启动数据库。

  3. 利用“repmgr witness register”命令实现对witness节点的注册。

  4. 启动repmgrd守护进程。

3.4 编者注

  1. 部署完成后,每个节点都有自己的元数据表,记录所有集群节点的信息。

  2. 每个节点都有自己的repmgrd守护进程来监控节点数据库状态。

  3. 其中主节点守护进程主要用来监控本节点数据库服务状态。

  4. 备节点守护进程主要用来监控主节点和本节点数据库服务状态。

  5. 在发生Auto Failover时,备节点在尝试N次连接主节点失败后,repmgrd会在所有备节点中选举一个候选备节点(选举机制参考以下Tips)提升为新主节点,然后其他备节点Follow到该新主上,形成一个新的集群状态。

4 repmgr 实战

Repmgr 环境准备
Repmgr 源码安装与部署
Repmgr 故障切换

5 小结&FAQ

5.1 repmgr常用命令简介

repmgr命令 简介
repmgr primary register 注册对应服务器的primary节点为主服务器节点
repmgr primary unregister 注销不活动的主服务器节点
repmgr standby clone 从主节点复制数据到standby节点
repmgr standby register 注册对应节点standby节点为备用服务器节点
repmgr standby unregister 注销备用服务器节点
repmgr standby promote 将备服务器节点提升为主服务器节点
repmgr standby follow 将一主多备架构中,其余的standby被服务器节点重新指向新的primary主服务器节点
repmgr standby switchover 将指定备服务器节点提升为主服务器节点,并将primary主服务器降级为备服务器节点
repmgr witness register 注册指定节点为见证服务器节点
repmgr witness unregister 注销见证服务器节点
repmgr node status 查看各节点的基本信息和复制状态
repmgr node check 高可用集群节点状态信息检查
repmgr node rejoin 重新加入一个失效节点到集群
repmgr cluster show 查看集群中已注册的节点基本信息与状态
repmgr cluster matrix 查看集群中所有节点的matrix信息
repmgr cluster crosscheck 查看集群中所有节点间两两交叉连接检测
repmgr cluster event 查看集群事件记录信息
repmgr cluster cleanup 清理集群监控历史

5.2 repmgr和postgresql版本兼容性矩阵

repmgr version Supported? Latest release Supported PostgreSQL versions
repmgr 5.3 YES 5.3.3 (2022-10-17) 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15
repmgr 5.2 NO 5.2.1 (2020-12-07) 9.4, 9.5, 9.6, 10, 11, 12, 13
repmgr 5.1 NO 5.1.0 (2020-04-13) 9.3, 9.4, 9.5, 9.6, 10, 11, 12
repmgr 5.0 NO 5.0 (2019-10-15) 9.3, 9.4, 9.5, 9.6, 10, 11, 12
repmgr 4.x NO 4.4 (2019-06-27) 9.3, 9.4, 9.5, 9.6, 10, 11
repmgr 3.x NO 3.3.2 (2017-05-30) 9.3, 9.4, 9.5, 9.6
repmgr 2.x NO 2.0.3 (2015-04-16) 9.0, 9.1, 9.2, 9.3, 9.4